Be more precise with buffer size in gbfread of a QString.
authorrobertlipe <robertlipe@f51c46e8-681c-474f-0cfe-069cfd0219fb>
Sun, 14 Dec 2014 21:29:22 +0000 (21:29 +0000)
committerrobertlipe <robertlipe@f51c46e8-681c-474f-0cfe-069cfd0219fb>
Sun, 14 Dec 2014 21:29:22 +0000 (21:29 +0000)
Misc hyperactive warning cleanups.

gpsbabel/dmtlog.cc
gpsbabel/gbfile.cc
gpsbabel/mmo.cc

index 4a5679570706070f35748fa117ab52fbdc799309..bccea5aa8ee96bca50e4880031a9e0eb0fab750f 100644 (file)
@@ -407,7 +407,7 @@ static void
 read_CTrackFile(const int version)
 {
   char buf[128];
-  uint32_t ver;
+  int32_t ver;
   int32_t tcount, wcount;
   int16_t u1;
   int32_t ux;
index a9b8a803e521138995f4e90ff157075ce9da1f49..4afd6e99005eb1d2f33e6542fba59b04ff0349ca 100644 (file)
@@ -701,9 +701,9 @@ gbsize_t
 gbfread(QString& buf, const gbsize_t size, 
         const gbsize_t members, gbfile* file) 
 {
-  // xcalloc() ensures the buf is zero terminated, so it's a proper c string.
-  char* tmp = static_cast<char*>(xcalloc(members, size));
-  gbsize_t retval = gbfread(tmp, size, members, file);
+  QByteArray tmp;
+  tmp.resize(members * size);
+  gbsize_t retval = gbfread(tmp.data(), size, members, file);
   buf = QString(tmp);
   return retval;
 }
@@ -1024,19 +1024,12 @@ gbfgetcstr(gbfile* file)
 QString
 gbfgetpstr(gbfile* file)
 {
-  int len;
-  char* result;
-
-  len = gbfgetc(file);
-  result = (char*) xmalloc(len + 1);
-  if (len > 0) {
-    gbfread(result, 1, len, file);
-  }
-  result[len] = '\0';
+  int len = gbfgetc(file);
+  QByteArray ba;
+  ba.resize(len);
+  gbfread(ba.data(), 1, len, file);
 
-  QString r(result);
-  xfree(result);
-  return r;
+  return QString(ba);
 }
 
 static char*
index 32f88ab584b45eb3456ea93e2ab051ef72955dcd..d3fe913d11d06eca679c20849633e85ac20896d5 100644 (file)
@@ -164,15 +164,15 @@ mmo_readstr(void)
       // length is number of "characters" not number of bytes
       len = (unsigned)gbfgetc(fin);
       if (len > 0) {
-        unsigned int ii, jj, ch, resbytes=0;
+        unsigned int ch, resbytes=0;
         res = (char*) xmalloc(len*2 + 1);  // bigger to allow for utf-8 expansion
-        for (ii=0; ii<len; ii++) {
+        for (signed int ii = 0; ii<len; ii++) {
           char utf8buf[8];
           int utf8len;
           ch = gbfgetint16(fin);
           // convert to utf-8, possibly multiple bytes
           utf8len = cet_ucs4_to_utf8(utf8buf, sizeof(utf8buf), ch);
-          for (jj=0; jj < utf8len; jj++) {
+          for (signed int jj = 0; jj < utf8len; jj++) {
             res[resbytes++] = utf8buf[jj];
           }
         }
@@ -190,7 +190,7 @@ mmo_readstr(void)
   res[len] = '\0';
   if (len) {
     gbfread(res, len, 1, fin);
-    if (len != strlen(res)) {
+    if (static_cast<size_t>(len) != strlen(res)) {
       // strlen requires a size_t, but Microsoft's stupid compiler doesn't
       // do C99 %zd.  Thanx, Microsoft.
       fprintf(stdout, "got len %d but str is '%s' (strlen %d)\n", len, res, (int) strlen(res));